package cn.milk.util;

import javax.servlet.http.Part;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class FileUploadUtil {

    /**
     * 上传文件到指定目录
     *
     * @param uploadDir 文件保存的目录路径
     * @param part      上传的文件部分（从 HttpServletRequest 获取）
     * @return 上传后的文件名
     * @throws IOException 如果文件保存失败
     */
    public static String uploadFile(String uploadDir, Part part) throws IOException {
        // 获取上传的文件名
        String fileName = extractFileName(part);

        // 确保目录存在
        File uploadDirectory = new File(uploadDir);
        if (!uploadDirectory.exists()) {
            uploadDirectory.mkdirs();
        }

        // 保存文件到目标目录
        try (InputStream inputStream = part.getInputStream();
             FileOutputStream outputStream = new FileOutputStream(new File(uploadDir, fileName))) {
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, bytesRead);
            }
        }

        return fileName;
    }

    /**
     * 从 Part 对象中提取文件名
     *
     * @param part 上传的文件部分
     * @return 文件名
     */
    private static String extractFileName(Part part) {
        String contentDisposition = part.getHeader("content-disposition");
        for (String content : contentDisposition.split(";")) {
            if (content.trim().startsWith("filename")) {
                return content.substring(content.indexOf("=") + 2, content.length() - 1);
            }
        }
        return null;
    }
}